}
}
+static gboolean
+maybe_accept_completion (GtkEntry *entry,
+ GdkEvent *event)
+{
+ gboolean focus_in;
+
+ if (gdk_event_get_event_type (event) == GDK_FOCUS_CHANGE &&
+ gdk_event_get_focus_in (event, &focus_in) && !focus_in)
+ accept_completion_callback (entry);
+
+ return GDK_EVENT_PROPAGATE;
+}
+
static void
connect_completion_signals (GtkEntryCompletion *completion)
{
G_CALLBACK (clear_completion_callback), completion);
g_signal_connect (completion->priv->entry, "activate",
G_CALLBACK (accept_completion_callback), completion);
- g_signal_connect (completion->priv->entry, "focus-out-event",
- G_CALLBACK (accept_completion_callback), completion);
+ g_signal_connect (completion->priv->entry, "event",
+ G_CALLBACK (maybe_accept_completion), completion);
}
static void
G_CALLBACK (clear_completion_callback), completion);
g_signal_handlers_disconnect_by_func (completion->priv->entry,
G_CALLBACK (accept_completion_callback), completion);
+ g_signal_handlers_disconnect_by_func (completion->priv->entry,
+ G_CALLBACK (maybe_accept_completion), completion);
}
void